package cn.iocoder.boot.types.exception;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 应用程序自定义异常类
 * 继承自RuntimeException，用于处理业务逻辑中的异常情况
 * 包含异常码和异常信息，便于统一异常处理和错误追踪
 */
@EqualsAndHashCode(callSuper = true) //Lombok注解，生成equals和hashCode方法，callSuper=true表示调用父类的方法
@Data
public class AppException extends RuntimeException {

    private static final long serialVersionUID = 5317680961212299217L;

    /** 异常码，用于标识异常的类型，方便前端展示和后端定位问题 */
    private String code;

    /** 异常信息，用于描述异常的详细情况 */
    private String info;

    public AppException(String code) {
        this.code = code;
    }

    public AppException(String code, Throwable cause) {
        this.code = code;
        super.initCause(cause);
    }

    public AppException(String code, String message) {
        this.code = code;
        this.info = message;
    }

    public AppException(String code, String message, Throwable cause) {
        this.code = code;
        this.info = message;
        super.initCause(cause);
    }

    @Override
    public String toString() {
        return "cn.iocoder.boot.x.api.types.exception.XApiException{" +
                "code='" + code + '\'' +
                ", info='" + info + '\'' +
                '}';
    }

}
